/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.dwh.trigger;

import java.util.HashSet;

/**
 * Almacena la informacion de una Cola segun el archivo de configuracion.
 * Por ejemplo:
 * <PRE>
 *      queue.{id}.name = Nombre de la Cola (Cadena)
 *      queue.{id}.status = Estado de la Cola {on|off}
 *      queue.{id}.ip = Direccion IP (999.999.999.999)
 *      queue.{id}.port = Numero de puerto (99999)
 *      queue.{id}.triggers = Tipos de triggers ( T3, T4, ...)
 *
 * Donde id es el nombre de la cola que identifica la COLA en el archivo
 * de configuracion.
 * </PRE>
 * @author Jose Carlos Palma
 * @version v1.0
 */
public class QueueInfo {

    /**
     * Almacena el nombre del parametro en el archivo de configuracion (queue.{id}.name)
     */
    private String key;
    /**
     * Almacena el nombre de la Cola.
     */
    private String name;
    /**
     * Almacena el status de la Cola.
     */
    private String status;
    /**
     * Almacena la direccion IP de la Cola.
     */
    private String ip;
    /**
     * Almacena el numero de puerto de red.
     */
    private int port;
    /**
     * Almacena los tipos de trigger para esta cola.
     */
    private HashSet<String> types = new HashSet<String>();

    /**
     * Crea una instancia de QueueInfo.
     * @param key nombre del parametro en el archivo de configuracion.
     * @param name es el nombre de la cola.
     * @param status es el status de la cola (on o off).
     * @param ip es la ip de la cola.
     * @param port es el numero de puerto de red.
     * @param types contiene los tipos de triggers.
     */
    public QueueInfo(String key, String name, String status, String ip, int port, String types) {

        this.key = key;
        this.name = name;
        this.status = status;
        this.ip = ip;
        this.port = port;
        for (String t : types.split(",")) {
            this.types.add(t.trim());
        }
    }

    /**
     * Indica si type es un tipo valido para la cola.
     * @param type es un tipo de trigger.
     * @return true si type es un tipo valido.
     */
    public boolean hasType(String type) {
        return types.contains(type);
    }

    /**
     * Devuelve el nombre del parametro de la Cola.
     * @return the key es el nombre del parametro en el archivo de configuracion
     */
    public String getKey() {
        return key;
    }

    /**
     * Devuelve el nombre de la Cola
     * @return the name es el nombre de la Cola.
     */
    public String getName() {
        return name;
    }

    /**
     * Devuelve el status de la Cola.
     * @return the status es el status de la Cola (on o off).
     */
    public String getStatus() {
        return status;
    }

    /**
     * Devuelve la direccion ip.
     * @return the ip es la ip de la Cola.
     */
    public String getIp() {
        return ip;
    }

    /**
     * Devuelve el numero puerto de red.
     * @return the port es el numero de puerto de red.
     */
    public int getPort() {
        return port;
    }

    /**
     * Indica si la Cola tiene el status en on.
     * @return true si el status es igual a on.
     */
    public boolean isOn() {
        return this.status.equalsIgnoreCase("on");
    }

    /**
     * Indica si la Cola tiene el status en off.
     * @return true si el status es igual a off.
     */
    public boolean isOff() {
        return this.status.equalsIgnoreCase("off");
    }

    /**
     * 
     * @return
     */
    public HashSet<String> getTypes(){
        return this.types;
    }

    /**
     * Devuelva la representacion del objecto en un String.
     * @return un String
     */
    @Override
    public String toString() {
        StringBuilder retVal = new StringBuilder();

        retVal.append("[").append(name).append(", ").append(status);
        retVal.append(", ").append(ip).append(", ").append(port);
        retVal.append(", {").append(types.toString()).append("}]");

        return retVal.toString();
    }
}
